package com.haiyi.activiti.engine.framework.database;

import org.apache.ibatis.annotations.Select;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/12/5 14:07 </pre>
 *
 * @author hlu
 * @version 1.0
 * @since JDK 1.7
 */
public interface NativeQuery<T extends Serializable> {

    /**
     * 执行原生sql，对应的Mapper只需要继承这个接口，就拥有了执行原生sql的功能，无需其他配置，为防止sql注入，建议如下：
     * 比如我们要执行:select * from user where id = 1,我们可以向map中传入以下值：
     * {sql=select * from user where id = #{id},id=1}
     * 注意，这种场景不支持使用$，必须用#
     * @param parameterMap
     * @return
     */

    @Select("${sql}")
    List<T> findUsersByNativeQuery(Map<String, Object> parameterMap);

    @Select("select count(1) from (${sql})")
    long findUserCountByNativeQuery(Map<String, Object> parameterMap);
}
